package questionary;

import myExceptions.MyFileException;

/**
 * Pregunta que se leyo del archivo, contiene el tipo, la dificultad, el puntaje y
 * la pregunta.
 * 
 *  @see Questionary
 */
public abstract class Question {
	private int type;
	@SuppressWarnings("unused")
	private int diffic;
	private int score;
	private String question;
	
	/**
	 * Crea una pregunta
	 * @param type el tipo de pregunta
	 * @param diffic dificultad (0 = facil, 1 = normal y 2 = dificil)
	 * @param score puntaje de la pregunta
	 * @param question la pregunta
	 */
	public Question (int type, int diffic, int score, String question) {
		this.type = type;
		this.diffic = diffic;
		this.score = score;
		this.question = question;
	}
	
	/**
	 * 
	 * @return Devuelve el puntaje de la pregunta
	 */
	public int getScore() {
		return this.score;
	}
	/**
	 * 
	 * @return Devuelve el tipo de pregunta
	 */
	public int getType() {
		return this.type;
	}
	
	/**
	 * 
	 * @return Devuelve la pregunta
	 */
	public String getQuestion() {
		return this.question;
	}
	
	/**
	 * 
	 * @return La cantidad de opciones de una pregunta
	 */
	public abstract int getOptionsCount();
	
	/**
	 * 
	 * @return Las opciones que se pueden elegir para contestar la pregunta
	 */
	public abstract String[] getOptions();
	
	/**
	 * 
	 * @param s Contestacion de la pregunta
	 * @return True si se contesto correctamente
	 */
	public abstract boolean isCorrect(String[] s);
	
	/**
	 * 
	 * @param s Contestacion de la pregunta
	 * @param answsize La size de s
	 * @return True si se contesto correctamente
	 */
	public abstract boolean isCorrect(String[] s, int answsize);
	
	/**
	 * 
	 * @param s Contestacion de la pregunta
	 * @return True si se contesto correctamete
	 */
	public abstract boolean isCorrect(String s);
	
	/**
	 * 
	 * @param n Contestacion de la pregunta
	 * @return True si se contesto correctamente
	 */
	public abstract boolean isCorrect(Number n);
	
	/**
	 * 
	 * @return Las respuestas de la pregunta
	 */
	public abstract String[] getAnswers();

	/**
	 * 
	 * @return La cantidad de opciones correctas de la pregunta
	 */
	public abstract int getCorrectOptionsCount();

	/**
	 * Setea una pregunta
	 * @param text
	 */
	public void setQuestion(String text) {
		this.question = text;
	}
	
	/**
	 * Setea las opciones de una pregunta
	 * @param array
	 */
	public abstract void setOptions(String[] array);
	
	/**
	 * Setea la dificultad de una pregunta
	 * @param difficulty
	 */
	public void setDiffic(int difficulty) {
		this.diffic = difficulty;
	}
	
	/**
	 * Setea las respuestas
	 * @param array Las respuestas
	 * @throws MyFileException Si no se pudo setear correctamente
	 */
	public abstract void setAnswers(String[] array) throws MyFileException;

	/**
	 * Setea el puntaje de la pregunta
	 * @param score
	 */
	public void setScore(int score) {
		this.score = score;		
	}
}
